from multiprocessing import Pool


def say_hello(name):
    return f"Hello, {name}"


if __name__ == '__main__':
    # 创建一个新的进程池
    with Pool() as process_pool:
        # apply会出现阻塞 - 同步
        # 使用 apply_async实现异步
        hi_jeff = process_pool.apply_async(say_hello, args=("Jeff",))
        hi_john = process_pool.apply_async(say_hello, args=("John",))
        # 使用get，父进程会阻塞，直到每个进程都返回一个值
        # 如果hi_jeff需要花费10s，hi_john花费1s，那么hi_john需要等着hi_jeff结束才会打印出结果
        # 如何解决这个问题？ - 进程池执行器和asyncio
        print(hi_jeff.get())
        print(hi_john.get())
